/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package actioncombination.logic.agent.action;

import actioncombination.common.datastructure.Simple;
import actioncombination.common.value.IntegerValue;
import actioncombination.problem.gridworld.AgentStateImpl;
import actioncombination.logic.agent.AgentState;
import actioncombination.logic.environment.EnvironmentState;



/**
 *
 * @author Administrador
 */
public class DecrementVelocity extends ActionVelocity{

    @Override
    public AgentState execute(AgentState s) {
         AgentStateImpl estado = (AgentStateImpl) s;
        //obtengo la velocidad que trae el agente
        IntegerValue velocidad = (IntegerValue) estado.getVelocity();
        int indice;
        try {
            //obtengo el indice dentro del arreglo de velocidades
            //correspondiente a la velocidad que trae el agente
            indice = this.getActionIndex(velocidad);
            
            if (indice == 0) {
                //Como la accion es decrementar la velocidad cambio la velocidad del agente
                //asignando la velocidad que esta a la izquierda en el arreglo de velocidades
                //si el indice es cero devuelve el ultimo elemento del arreglo de velocidades
                //el ultimo corresponde al de la izquierda del primero
                estado.setVelocity((IntegerValue) this.getTypesOfVelocity().get(this.getTypesOfVelocity().size() - 1));
            } else {
                //Asigna el elemento que esta a la izquierda en el arreglo de velocidades
                estado.setVelocity((IntegerValue) this.getTypesOfVelocity().get(indice - 1));
            }

        } catch (Exception ex) {
            ex.getMessage();
        }
        //retorna el estado del agente con la velocidad cambiada
        
        //Implementar las formulas para devolver el proximo estado 
        //del agente con la nueva posicion
        return estado;
    }

    
    @Override
    public Double getCost() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String toString() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public EnvironmentState execute(AgentState ast, EnvironmentState est) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

   
}
